<?php

namespace App\Http\Controllers\admin;

use Illuminate\Http\Request;
use Hash;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;
use Validator;


/**
* 用户管理
*/
class UserController extends Controller
{
    /**
     * 用户信息分页展示
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        //闪存信息
        $request -> flash();
        
        //每页显示信息条数
        if ($request -> has('page_info_num')) {
            $page = $request -> get('page_info_num');
        }else{
            $page = 10; //默认每页信息数
        }
        
        //获得搜素信息
        $search = $request -> get('search');

        //获得每次都提交的参数
        $var = $request -> except('_token');

        //查询数据库
        $data = DB::table('user')->where('username','like','%'.$search.'%')->paginate($page);
        
        //解析模板
        return view('/admin/user/index',['data'=>$data,'var'=>$var]);
    }

    /**
     * 用户添加页面
     *
     * @return \Illuminate\Http\Response
     */
    public function getAdd()
    {
        //解析模板
        return view('admin.user.add');
    }

    /**
     * 将提交的用户信息过滤,并将合法信息插入数据库
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function postInsert(Request $request)
    {
        //接收数据
        $input = $request -> except('_token');
        
        //设置过滤规则
        $rules = [
            'username' => 'required',
            'password' => 'required',
            'repassword' => 'required|same:password',
        ];
        
        //设置错误消息
        $messages = [
                 'username.required' => '用户名是必填的',
                'password.required'  => '密码是必填的',
                'repassword.required'  => '检查密码是必填的',
                'repassword.same'  => '密码不一致',
        ];

        //验证数据
        $validator = Validator::make($input,$rules,$messages);
       
        if ($validator->fails()) {
            return back()
                        ->withErrors($validator)
                        ->withInput();
        }

        //去除无用字段
        $input = $request -> except('repassword','_token');
        $input['password'] = Hash::make($input['password']);
        //获取当前时间
        $ctime = time();
        $input['ctime'] = $ctime;
        
        //存入数据库
        $res = DB::table('user')->insert($input);
        
        //返回结果
        if ($res) {
         
           //跳转到用户列表并显示成功信息
           return redirect('admin/user/index')
                        ->with(['message'=>'添加成功','type'=>1]);
        }else{

           //跳转到添加页面
           return redirect('admin/user/add')
                        ->with(['message'=>'添加失败','type'=>2]);
        }
    }

    /**
     * 删除用户.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function getDelete($id)
    {
        //调用数据库删除数据
        $res = DB::table('user') -> where('id',$id) -> delete();
        
        //返回结果
        if ($res) {
         
           //跳转到用户列表并显示删除成功
           return redirect('admin/user/index')
                        ->with(['message'=>'删除成功','type'=>1]);
        }else{

           //跳转到用户列表并显示删除失败
           return redirect('admin/user/index')
                        ->with(['message'=>'删除失败','type'=>2]);
        }
    }

    /**
     * 显示具体用户的信息修改界面.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function getEdit($id)
    {
        //查询数据库
        $data = DB::table('user') -> where('id',$id) -> first();

        //解析模板
        return view('admin/user/edit',['data'=>$data]);
    }

    /**
     * 修改用户信息
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function postUpdate(Request $request,$id)
    {
        //接收数据
        $input = $request -> except('_token');
        
        //设置过滤规则
        $rules = [
            'repassword' => 'same:password',
        ];
        
        //设置错误消息
        $messages = [
                'repassword.same'  => '密码不一致',
        ];

        //验证数据
        $validator = Validator::make($input,$rules,$messages);
        if ($validator->fails()) {
            return back()
                        ->withErrors($validator)
                        ->withInput();
        }

        //去除无用字段
        $update = $request -> except('_token','repassword');

        //去除空值
        $arr = [];
        foreach ($update as $key => $value) {
            if(!empty($value)){
                $arr[$key] = $value;
            }
        }
        if (empty($arr)) {
            return back();
        }
        //存入数据库
        $res = DB::table('user') -> where('id',$id) -> update($arr);
        
        //返回结果
        if ($res) {
         
           //跳转到用户列表并显示成功信息
           return redirect('admin/user/index')
                        ->with(['message'=>'修改成功','type'=>1]);
        }else{

           //跳转到添加页面
           return redirect('admin/user/edit/'.$id)
                        ->with(['message'=>'修改失败','type'=>2]);
        }
    }

    /**
     * 显示用户详情页面
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function getDetail($id)
    {
        //
        return view('admin/user/detail');
    }
}
